import store from '@/store'
import router from '@/router'
router.beforeEach(async(to, from, next) => {
  const whiteList = ['/login', '/404']
  // 1、先判断有没有token
  if (store.getters.token) {
    // 如果有token再判断是不是去登录页
    if (to.path === '/login') {
      // 去登录页,跳到主页
      next('/')
    } else {
      // 这里有token，也不是到登录页，后台正常放行的逻辑中就需要获取用户资料
      // await store.dispatch('user/getUserInfo')
      // 每次跳转页面都会经过这里，最好先确认之前有没有拿到过数据，再发请求，如果之前难过直接放行即可
      if (!store.state.user.userInfo.userId) {
        const res = await store.dispatch('user/getUserInfo')
        // console.log('触发筛选过程')
        // 添加单个动态路由进去
        const routes = await store.dispatch('permission/filterRouters', res.roles.menus)
        router.addRoutes([...routes, { path: '*', redirect: '/404', hidden: true }])
        // 这里是第一次进入页面(刷新)获取用户资料
        // 用户资料里面有权限列表可以用来做筛选
        // 将筛选的逻辑放入到 vuex 里面
        // 需要准备两个数据 1. 全部的动态路由列表 2. 当前用户的信息
        // 如果是添加的路由, 添加的时间点其实晚于匹配过程, 发现一片空白
        // 需要在当前的目的地路径中原地跳一次, 重新触发匹配过程才行
        next(to.path)
      } else {
        // 不去登录， 直接发行
        next()
      }
    }
  } else {
    // 如果没有token，在不在白名单
    // if (whiteList.indexOf(to.path) > -1) {
    if (whiteList.includes(to.path)) {
      // 在白名单就发行
      next()
    } else {
      // 不在白名单就去登录页
      next('/login')
    }
  }
})
